home *** CD-ROM | disk | FTP | other *** search
- unit UnitConsoleInterface;
-
- interface
-
- uses SysUtils, frs_Ibase, frs_Ibase_Object, frs_IBStartParams
- , UnitAttachDB
- , UnitUserInfo
- , UnitQueryDB
- ;
-
- procedure ConsoleMenu;
-
- implementation
-
- procedure SetMenu;
- begin
- with frs_GDS do begin
- writeln('InterBase API Demonstration project.');
- writeln('Choose an option and then press <Enter>.');
- writeln;
- if not assigned(DBHandle) then begin
- writeln(#9,'Open Database'#9#9'O');
- writeln(#9,'Set Buffers and open db'#9'B');
- writeln;
- end
- else begin
- writeln(#9,'List Usernames'#9#9'U');
- writeln;
- writeln(#9,'View employees'#9#9'V');
- // writeln(#9,'Alter employee info'#9'A');
- writeln;
- writeln(#9,'Dynamic Query'#9#9'S');
- writeln;
- end;
- writeln(#9,'Exit'#9#9#9'X');
- write('>');
- end;
- end;
-
- Procedure SetHelpScreen;
- begin
- writeln('InterBase API Demonstration project.');
- writeln;
- writeln('Create a shortcut and enter the location of employee.gdb as follows:');
- writeln;
- writeln(#9'/d Database name ie Path\employee.gdb');
- writeln(#9'/s ServerName ie myserver');
- writeln;
- writeln(#9'/n Network protocol:');
- writeln(#9#9'0 - NetBeui');
- writeln(#9#9'1 - IPX/SPX');
- writeln(#9#9'2 - TCP/IP');
- writeln(#9#9'3 - Local');
- writeln;
- writeln(#9'/u - username');
- writeln(#9'/p - password');
- writeln;
- writeln(#9'eg /d c:\data\employee.gdb /s myserver /n 0 -u SYSDBA -p masterkey');
- writeln;
- writeln('Hit <enter> to continue.');
- writeln;
- end;
-
- Function GetBuffers: Integer;
- var
- BufferStr: String;
- begin
- BufferStr:='0';
- Write('Enter buffers to set (64-64000) and press <enter> : ');
- repeat
- ReadLn(BufferStr);
- try
- Result:=StrToInt(BufferStr);
- except
- Result:=0;
- end;
- until
- Result<>0;
- end;
-
-
- procedure SetErrorScreen;
- var
- ErrStr: String;
- begin
- ErrStr:=frs_GDS.ErrorMessages;
- Writeln('Fatal Error encountered:');
- Writeln;
- Writeln(ErrStr);
- Writeln;
- Writeln('Press X followed by <enter> to exit');
- end;
-
- Procedure OpenDb;
- begin
- try
- UnitAttachDB.Open;
- WriteLn('Database opened.');
- Writeln;
- SetMenu;
- except
- SetErrorScreen;
- end;
- end;
-
- procedure DisplayUsers;
- var
- UserNames: TLargePB;
- UserCount: Integer;
-
- i,
- Item, //InfoItem we are testing for
- Pos, //marker for position in array
- Len, //Length of section
- namelength: SmallInt;
- UserStr: array[0..255] of char;
- begin
- Fillchar(UserNames,sizeof(UserNames),#1);
- try
- UnitUserInfo.GetUserInfo(UserNames);
-
- (* Usernames will now have data in the following format:
-
- '5', //Info type - isc_info_user_name
- #6, #0, //Number of bytes in next section
- #5, //length of name
- 'G', 'U', 'E', 'S', 'T', //name
- '5', //Info type - isc_info_user_name
- #7, #0, //Number of bytes in next section
- #6, //length of name
- 'S', 'Y', 'S', 'D', 'B', 'A', //name
-
- etc. etc.
-
- #1, //isc_info_end (hopefully)
-
- *)
-
- writeln('The following users are currently connected:');
- writeln;
- item:=0;
- UserCount:=0;
-
- while not ((((UserNames[item])=char(isc_info_end)) OR
- ((UserNames[item])=char(isc_info_error))) OR
- ((UserNames[item])=char(isc_info_truncated))) do begin
-
- pos:=item; //isc_info_user_name
- inc(pos); //start of length byte pair
- len:=frs_GDS.isc_vax_integer(@UserNames[pos],2); //read the two-byte length and save it for Ron.
- inc(pos,2); //move forward to byte telling us length of name
- UserStr:='';
- NameLength:=byte(UserNames[pos])+1;
- fillChar(UserStr,256,#0);
- for i:=1 to namelength-1 do
- UserStr[i-1]:=UserNames[pos+i];
- writeln(#9,UserStr);
- inc(UserCount);
- inc(item,len+3);{move to next item (3 covers length of item (one byte) and len (two bytes)}
-
- end;
- writeln;
- WriteLn(IntToStr(UserCount),' users');
-
- except
- writeln('Error retrieving user info: ');
- Writeln;
- Writeln(frs_GDS.ErrorMessages);
- end;
- Writeln;
- SetMenu;
- end;
-
- Procedure SelectEmployeeList;
- var
- keypress: Char;
- SelectStr: String;
- ResultStr: String;
- begin
- SelectStr:= 'select emp_no, full_name, Salary '+
- 'from employee where last_name starting with upper(?)'+
- 'order by last_name';
-
- with frs_GDS do begin
- TransactionStart;
- UnitQueryDB.PrepareStatement(SelectStr);
- writeln('What letter does the last name start with?');
- keypress:=#0;
- repeat
- read(keypress);
- until
- upcase(keypress) in ['A'..'Z'];
- UnitQueryDB.AssignParam(keypress,0);
- UnitQueryDb.ExecuteStatement;
- writeln;
-
- //now get the column titles
- ResultStr:=UnitQueryDb.ReadTitles;
- writeln(ResultStr);
- writeln;
-
- //now get the results, row by row
- ResultStr:='';
- repeat
- ResultStr:=ReadRow;
- writeln(ResultStr);
- until
- ResultStr='';
-
- //cleanup
- TransactionCommit;
- UnitQueryDb.UnprepareStatement;
-
-
- end;
-
- SetMenu;
-
- end;
-
- procedure RunDynamicSelect;
- var
- SelectStr: String;
- ResultStr: String;
- begin
-
- writeln('Enter Select statement:');
- repeat
- readln(SelectStr);
- until
- (SelectStr<>'');
-
- //test if select. reject if not
- if 'select'=lowercase(copy(SelectStr,1,6)) then
-
- with frs_GDS do begin
- TransactionStart;
- UnitQueryDB.PrepareStatement(SelectStr);
- UnitQueryDb.ExecuteStatement;
- writeln;
-
- //titles
- writeln(UnitQueryDb.ReadTitles);
- writeln;
-
- //now get the results, row by row
- ResultStr:='';
- repeat
- ResultStr:=ReadRow;
- writeln(ResultStr);
- until
- ResultStr='';
-
- writeln;
-
- //cleanup
- TransactionCommit;
- UnitQueryDb.UnprepareStatement;
-
- end
-
- else
- writeln('You must enter a valid Select statement.');
-
- Writeln;
- SetMenu;
-
- end;
-
-
- procedure ConsoleMenu;
- var
- keypress: Char;
- begin
-
- keypress:=#0;
- //if no database specified then display help screen
- with IBStartupParams do
- if IBDatabase='' then
- DisplayHelp:=True;
-
- if (IBStartupParams.DisplayHelp=True) then begin
- SetHelpScreen;
- while keypress<>#13 do
- read(keypress);
- end
- else begin
- SetMenu;
- repeat
- read(keypress);
- case UpCase(keypress) of
-
- 'O' : OpenDB;
-
- 'B' : begin
- IBStartUpParams.IBBuffers:=GetBuffers;
- OpenDb;
- Writeln(IntToStr(IBStartUpParams.IBBuffers)+' buffers set.');
- end;
-
- 'U' : DisplayUsers;
-
- 'V' : SelectEmployeeList;
-
- // 'A' : AmendEmployeeDetails;
-
- 'S' : RunDynamicSelect;
-
- 'X' : begin
- UnitAttachDB.close;
- WriteLn('Database attachment closed.');
- Writeln;
- end;
- end;
- until
- UpCase(keypress)='X';
-
- end;
-
- end;
-
- end.
-